
package menu;

import dominio.*;

import persistencia.* ;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Date;

public class Principal {
        private static Principal InstanciaPrincipal;
        private Connection conn;

   /**
 * Conexão com o banco de dados
 *
 */
        private Principal () {
                Conecta c = Conecta.getConnection();
                this.conn = c.conn;
        }

/**
 *
 * Singleton. Usado para que haja apenas uma conexão com o banco sendo usada no sistema
 *
 */
        public static Principal getInstance(){
	if(InstanciaPrincipal == null) {
                        	InstanciaPrincipal = new Principal();
	    }
            return InstanciaPrincipal;
        }
    
public void menuCadastros (PersistenciaCliente pC, PersistenciaVeiculo pV, PersistenciaMotorista pM, PersistenciaFuncionario pF, PersistenciaTipoLocacao pTL, PersistenciaLocacao pL) throws SQLException, Exception {

             int opcao=1;
             
              while (opcao != 0) { 

                    System.out.println("Locarrão Rent a Car");
                    System.out.println("Digite o número referente ao tipo de cadastro desejado.");
                    System.out.println("1 - Cliente");
                    System.out.println("2 - Motorista");
                    System.out.println("3 - Funcionário");
                    System.out.println("4 - Tipo de Locação");
                    System.out.println("5 - Veículos");
                    System.out.println("6 - Locação");
                    System.out.println("Digite 0 zero para ir ao menu anterior.");

                    opcao = Console.readInteger();

                    switch (opcao) {

                        case 0 :
                                        System.out.println("Menu Cadastros Finalizado.");
                                        break;

                       /* case 1 :
                                        pC.cadastroCliente();
                                        break;
*/
                        case 2:
                                        pM.cadastroMotorista();
                                        break;

                      /*  case 3:
                                        pF.cadastroFuncionario();
                                        break;
*/
                        case 4:
                                        pTL.cadastroTipoDeLocacao();
                                        break;

                   /*     case 5:
                                        pV.cadastroVeiculo();
                                        break;
                    */
                        case 6:
                                       pL.cadastroLocacao();
                                       break;

                        default :
                                        System.out.println("Opção Inválida.");
                                        break;
                    }
           }
}

public void menuAlteracoes(PersistenciaCliente pC, PersistenciaVeiculo pV, PersistenciaMotorista pM, PersistenciaFuncionario pF, PersistenciaTipoLocacao pTL, PersistenciaLocacao pL){

    int opcao = 1;
    while (opcao != 0) { 

        System.out.println("Locarrão Rent a Car");
        System.out.println("Digite o número referente ao tipo de cadastro que deseja alterar.");
        System.out.println("1 - Cliente");
        System.out.println("2 - Motorista");
        System.out.println("3 - Funcionário");
        System.out.println("4 - Tipo de Locação");
        System.out.println("5 - Veículos");
        System.out.println("Digite 0 zero para ir ao menu anterior.");

        opcao = Console.readInteger();

        switch (opcao) {
            
            case 0 :
                        System.out.println("Menu de alterações finalizado.");
                        break;

         /*   case 1 :
                        System.out.println("Digite o CPF do cliente: ");
                        long cpf = Console.readLong();
                        pC.alteraCadastroCliente(cpf);
                        break;
*/
            case 2:
                        System.out.println("Digite a CNH do motorista: ");
                        long cnh = Console.readLong();
                        pM.alteraCadastroMotorista(cnh);
                        break;
                   
            /*case 3:
                        System.out.println("Digite o CPF do funcionário: ");
                        cpf = Console.readLong();
                        pF.alteraCadastroFuncionario(cpf);
                        break;
*/
            case 4:
                        pTL.alteraCadastroTipoLocacao();
                        break;

            case 5:
                        System.out.println("Digite a placa do veículo: ");
                        String placa = Console.readString();
                        pV.alteraCadastroVeiculo(placa);
                        break;
                
            default :
                        System.out.println("Opção inválida.");
                        break;
         }
     }    
}

public void menuConsultas(PersistenciaCliente pC, PersistenciaVeiculo pV, PersistenciaMotorista pM, PersistenciaFuncionario pF, PersistenciaTipoLocacao pTL, PersistenciaLocacao pL) throws SQLException {

    int opcao = 1;

    while (opcao != 0) {
                    ArrayList<Locacao> locacoes = new ArrayList<Locacao>();
                    ArrayList<Veiculo> veiculos = new ArrayList<Veiculo>();
                    System.out.println("Locarrão Rent a Car");
                    System.out.println("Digite o número referente à opção desejada.");
                    System.out.println("1 - Locações em Aberto");
                    System.out.println("2 - Locações Finalizadas");
                    System.out.println("3 - Veículos Disponíveis");
                    System.out.println("4 - Veículos mais procurados");
                    System.out.println("5 - Veículos mais rentáveis");
                    System.out.println("6 - Pesquisa por tipo de Veículo e suas disponibilidades");
                    System.out.println("Digite 0 zero para sair");
                    
                    opcao = Console.readInteger();

                    switch (opcao) {
                        
                        case 0 :
                                    System.out.println("Menu de consultas finalizado.");
                                    break;
                        
                        case 1 :
                                    locacoes = pL.consultaLocacaoAberta();
                                    pL.imprimeLista(locacoes);
                            break;
                            
                        case 2 : 
                                    locacoes = pL.consultaLocacaoFinalizada();
                                    pL.imprimeLista(locacoes);
                            break;
                            
                        case 3 :
                                    pV.consultaVeiculosDisponiveis();
                                    pV.imprimeLista(veiculos);
                            break;
                            
                        case 4 : 
                                    pV.consultaVeiculosMaisProcurado();
                                    pV.imprimeLista(veiculos);
                            break;
                            
                        case 5 :
                                    pV.consultaVeiculosMaiorRenda();
                                    pV.imprimeLista(veiculos);
                            break;
                            
                        case 6 :
                                    pV.consultaPorTipo();
                                    pV.imprimeLista(veiculos);
                            break;
                            
                        default :
                                    System.out.println("Opção Inválida.");
                                    break;                            
                    }
    }
}

public void menuCadastroDevolucoes () {

    String placa;
    long cpf;
    int ndias = 0;
    Double valorLocacao;
    String dataAtual, dataFinal;
    Double kmFinal;
    Statement statement;
    ResultSet result, result2;

        
        try {
            System.out.println("Digite o CPF do cliente: ");
            cpf = Console.readLong();
            System.out.println("Digite a placa do veiculo a ser devolvido: ");
            placa = Console.readString();
            statement = conn.createStatement();
            result = statement.executeQuery("SELECT * FROM Locacao WHERE fkCpfCliente = "+cpf+" AND fkPlacaVeiculo = "+placa+"'");
            if (result.next()){
                    
                    System.out.println("Digite a data de hoje: ");
                    dataAtual = Console.readString();
                    System.out.println("Digite o km: ");
                    kmFinal = Console.readDouble();
                    ndias = 5;
 //                   ndias = dataAtual - result.getDate("dataSaida"); //COMO SUBTRAI DATAS
                    if (result.getString("fkTipoLocacao").equalsIgnoreCase("por quilometragem")) {
                        result2 = statement.executeQuery("SELECT * FROM TipoLocacao WHERE tipo = "+"'"+"por quilometragem"+"'");
                        valorLocacao = result2.getDouble("taxaBase") * ndias;
                     }
                    else {
                        result2 = statement.executeQuery("SELECT * FROM TipoLocacao WHERE tipo = "+"'"+"quilometragem livre"+"'");
                        valorLocacao = result2.getDouble("taxaBase") + ndias;
                     }
                    statement.executeUpdate("UPDATE Locacao SET  =  kmEntrada'"+kmFinal +"' WHERE fkCpfCliente = "+"'"+cpf+" AND fkPlacaVeiculo = "+"'"+placa+"'");
                    statement.executeUpdate("UPDATE Locacao SET  =  valorLocacao '"+valorLocacao+"' WHERE fkCpfCliente = "+"'"+cpf+" AND fkPlacaVeiculo = "+"'"+placa+"'");
                    statement.executeUpdate("UPDATE Locacao SET  =  finalizada '"+1 +"' WHERE fkCpfCliente = "+"'"+cpf+" AND fkPlacaVeiculo = "+"'"+placa+"'");
            }
        } catch (SQLException ex) {
            System.out.println("Erro em cadastrar devolução");
            //Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);

        }
    }
}